OpenRoads Designer CONNECT Edition SDK Help

Delete level with elements

The below code snippet shows deleting the level with all the elements from current DGN using the same level.


public bool DeleteLevelWithElements()
        {
            //Set level name to delete
            string levelNameToDelete = "ASampleLevel";

            //Get Active Dgn Model
            //DgnModel model = Session.Instance.GetActiveDgnModel();
            DgnModelRef dgnModelRef = Session.Instance.GetActiveDgnModelRef();

            //Get all levels collection 
            FileLevelCache fileLevelCache = dgnModelRef.GetFileLevelCache();

            LevelHandle levelToDelete = fileLevelCache.GetLevelByName(levelNameToDelete);
            if (levelToDelete == null) return false;

            try
            {
                DgnFile dgnFile = dgnModelRef.GetDgnFile();
                //Get all models collection from DGN
                ModelIndexCollection modelIndexCollection = dgnFile.GetModelIndexCollection();

                foreach (ModelIndex modelIndex in modelIndexCollection)
                {
                    DgnModel dgnModel = dgnFile.LoadRootModelById(out StatusInt status, modelIndex.Id);
                    ModelElementsCollection modelElementsCollection = dgnModel.GetGraphicElements();
                    foreach (Element element in modelElementsCollection)
                    {
                        LevelId elementLevelID = element.LevelId;
                        //Compare element level Id and level to delete Id
                        if (levelToDelete.LevelId == elementLevelID)
                        {
                            if (!element.IsDeleted && !element.IsInvisible && element.IsGraphics && element.IsPersistent && element.IsValid)
                            {
                                try
                                {
                                    //Delete element from DGN
                                    element.DeleteFromModel();
                                }
                                catch (Exception ex)
                                {
                                    Trace.WriteLine(ex.Message);
                                }
                            }
                        }
                    }            
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);          
            }

            //Delete Level
            LevelHandle next = null;
            if (LevelCacheErrorCode.None == fileLevelCache.RemoveLevel(next, levelToDelete))
                return true;
            else
                return false;        
        }